/*
* This file is a part of the open-eBackup project.
* This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
* If a copy of the MPL was not distributed with this file, You can obtain one at
* http://mozilla.org/MPL/2.0/.
*
* Copyright (c) [2024] Huawei Technologies Co.,Ltd.
*
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
*/
#ifndef REPLICATION_DEVICE_MANAGER
#define REPLICATION_DEVICE_MANAGER

#include <string>
#include <mutex>
#include "constant/PluginNasTypes.h"
#include "device_access/dorado/DoradoNas.h"
#include "PluginSemaphore.h"

namespace nasreplicationservice {
class ReplicationDeviceManager {
public:
    static ReplicationDeviceManager& GetInstance();
    std::shared_ptr<Module::DoradoNas> GetDeviceByIp(const std::string& mgrIp);
    void AddDevice(std::string mgrIp, std::shared_ptr<Module::DoradoNas> deviceControl);
    void RemoveDeviceFromMap(const std::string& mgrIp);
    void Signal();
    void Wait();

private:
    ReplicationDeviceManager();
    ~ReplicationDeviceManager();
    std::unordered_map<std::string, std::shared_ptr<Module::DoradoNas>> m_deviceMap;
    std::mutex m_mutex; // 保护devicemap
    PluginSemaphore m_semaphore { 1 };
};
}

#endif